package controller;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import model.Artikel;
import model.Benutzer;
import model.Gebot;
import model.artikelListe;
import dao.ArtikelDAO;
import dao.BenutzerDAO;
import dao.GebotDAO;
import db.DbConnection;

public class ArtikelController {

	ResultSet rs;

	public boolean Artikel_anlegen(String name, String verkaeufer, Date startdatum, double gebotspreis, double SofortKaufP, Date enddatum, String beschreibung, String isbn, String kategorie) throws SQLException {
		ArtikelDAO dao = new ArtikelDAO();
		Calendar cal = Calendar.getInstance();

		String status = "geschlossen";
		if (startdatum.before(cal.getTime()) && enddatum.after(cal.getTime())) {
			status = "offen";
		}

		dao.saveArtikel(new Artikel(name, status, verkaeufer, startdatum, gebotspreis, SofortKaufP, enddatum, beschreibung, isbn, kategorie));
		return true;
	}

	public Artikel Artikel_kaufen(double gebotspreis, String buch, String kaeufer, boolean sofort) throws SQLException {
		Connection con = DbConnection.getInstance();
		Statement stm = con.createStatement();

		Artikel a = null;
		ArtikelDAO dao = new ArtikelDAO();
		Benutzer b = null;
		BenutzerDAO bdao = new BenutzerDAO();

		Date currentDate = new Date();
		Date checkDate = new Date();

		try {
			a = dao.findArtikel(buch, "").get(0);
			b = bdao.getBenutzerByName(a.get_verkaeufer());
		} catch (SQLException e) {
			e.printStackTrace();
		}

		checkDate = a.get_enddatum();

		if (b != null && b.get_Benutzername().equals(kaeufer)) {
			return null;
		} else if (a != null && a.get_gebotspreis() <= gebotspreis && a.get_status().equals("offen")) {
			GebotDAO gebotDAO = new GebotDAO();
			
			if (sofort) {
				gebotspreis = a.get_SofortKaufP();
			}
			
			a.set_kaeufer(kaeufer);
			a.set_gebotspreis(gebotspreis);
			
			if (sofort) {
				a.set_status("verkauft");
			}
			
			gebotDAO.saveGebot(new Gebot(a.get_id(), (float) gebotspreis, currentDate.getTime(), kaeufer));
			dao.saveArtikel(a);

			return a;
		}

		if (currentDate.after(checkDate)) {
			final String UpdateGebot = String.format("UPDATE Artikel SET Status = '%s'", "Geschlossen");
			stm.executeUpdate(UpdateGebot);
			return null;
		}

		return null;
	}

	public artikelListe Artikel_suchen(String name, String kategorie) throws SQLException {
		artikelListe a = null;
		ArtikelDAO dao = new ArtikelDAO();
		try {
			a = dao.findArtikel(name, kategorie);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return a;
	}
	public artikelListe Artikelanzeigen(String name, String kategorie) throws SQLException {
		artikelListe a = null;
		ArtikelDAO dao = new ArtikelDAO();
		try {
			a = dao.anzeigenArtikel(name, kategorie);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return a;
	}
}
